﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {        
       // 1、定义一个方法，求一个整数数组中的最大值，最小值，和，平均数。
        //    如果是一个方法只能有一个返回值，那只能每一个都得定义一个方法来实现，
        //    不过有了ref和out这实现起来就方便多了。

        //参考步骤：state
        //定义一个一维数组，数组中存放一些数据（控制台输入）。
        //定义几个变量：max、min、sum、avg

        //定义一个方法，方法返回数组元素之和,方法形参有max min avg。

        //请用ref和out各做一遍，并在注释中，描述他们的区别。
    public static void refcalculate(double[] arr, ref double max, ref double min, ref double sum, ref double avg)
        {         
            for (int i = 0; i < arr.Length; i++)
            {
                sum = sum + arr[i];

                if (max < arr[i])
                {
                    max = arr[i];
                }
                if (min > arr[i])
                {
                    min = arr[i];
                }
            }
            avg = sum / arr.Length;
        }
        public static void refgo(){
            Console.WriteLine("ref方法：");
            double[] arr = new double[5];
                    for (int i = 0; i < arr.Length; i++)
                    {
                        Console.WriteLine("请输入第" + (i + 1) + "个数");
                        double num = Convert.ToDouble(Console.ReadLine());
                        arr[i] = num;
                    }
                    double max = arr[0];
                    double min = arr[0];
                    double sum = 0;
                    double avg = 0;
                    refcalculate(arr, ref max, ref min, ref sum, ref avg);
                    Console.WriteLine("最大值为{0}，最小值为{1}，总和为{2}，平均值为{3}", max, min, sum, avg);
                    Console.WriteLine();
        }
     public static void outcalculate(double[] arr, out double max, out double min, out double sum, out double avg)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine("请输入第" + (i + 1) + "个数");
                double num = Convert.ToDouble(Console.ReadLine());
                arr[i] = num;
            }
            max = arr[0];
            min = arr[0];
            sum = 0;
            avg = 0;

            for (int i = 0; i < arr.Length; i++)
            {
                sum = sum + arr[i];

                if (max < arr[i])
                {
                    max = arr[i];
                }
                if (min > arr[i])
                {
                    min = arr[i];
                }
            }
            avg = sum / arr.Length;
        }
        public static void outgo()
        {
           
            Console.WriteLine("out方法：");
            double[] arr = new double[5];
            double max;
            double min;
            double sum;
            double avg;
            outcalculate(arr, out max, out min, out sum, out avg);
            Console.WriteLine("最大值为{0}，最小值为{1}，总和为{2}，平均值为{3}", max, min, sum, avg);
            Console.WriteLine();
        }



        //1、编写程序，定义一个枚举类型，表示订单的状态值：新订单、已发货、已签收、已评价；声明一个枚举类型表示某个订单的状态并将其值输出。

        //2、有一款叫做“切水果”的游戏，里面有各种各样的水果，
        //A、现在请定义一个叫做“Fruit”的枚举类型，里面有：香蕉、苹果、西瓜、草莓、葡萄、哈密瓜、奇异果。
        //B、然后定义一个输出水果分数的方法，参数类型就是这个水果枚举，方法中根据不同的枚举值，输出水果对应的分数（可以参考切水果游戏）。注：水果形状越小，切到的时候分数就越高。


        //3、RPG游戏中，通常有不同的职业，比如“战士”、“法师”、“精灵”等等职业，
        //A、现在请定义一个游戏职业的枚举。
        //B、然后定一个输出职业技能的方法，根据传入的职业枚举的值来输出，
        //战士的技能：碎石打击、烈焰锚钩、战斗咆哮
        //法师的技能：巨浪冲击、元素突击、复仇杀戮
        //精灵的技能：减速陷阱、能量浪潮、旋风剑舞
    enum order
        {
            新订单,
            已发货,
            已签收,
            已评价
        }
    public enum Fruit
        {
            香蕉,
            苹果,
            西瓜,
            草莓,
            葡萄,
            哈密瓜,
            奇异果
        }
    public enum RPG
        {
            战士的技能,
            法师的技能,
            精灵的技能
        }
    //枚举水果题：    
    public static void Test2() {
            Console.WriteLine("枚举第二题：");
            Console.WriteLine("1.香蕉，2.苹果，3.西瓜，4.草莓，5.葡萄，6.哈密瓜，7.奇异果");
            Console.WriteLine("请选择要切的水果序号：");
            int num = Convert.ToInt32(Console.ReadLine());
            switch (num)
            {
                case 1:
                    test2(Fruit.香蕉);
                    break;
                case 2:
                    test2(Fruit.苹果);
                    break;
                case 3:
                    test2(Fruit.西瓜);
                    break;
                case 4:
                    test2(Fruit.草莓);
                    break;
                case 5:
                    test2(Fruit.葡萄);
                    break;
                case 6:
                    test2(Fruit.奇异果);
                    break;
                case 7:
                    test2(Fruit.哈密瓜);
                    break;
                default:
                    Console.WriteLine("输入的数字不符合规范，请重新输入！！！");
                    Test2();
                    break;
            }
            Console.WriteLine();
        }
        public static void test2(Fruit fruit)
        {

            switch (fruit)
            {
                case Fruit.香蕉:
                    Console.WriteLine("切香蕉得分为：3分");
                    break;
                case Fruit.苹果:
                    Console.WriteLine("切苹果得分为：4分");
                    break;
                case Fruit.西瓜:
                    Console.WriteLine("切西瓜得分为：7分");
                    break;
                case Fruit.草莓:
                    Console.WriteLine("切草莓得分为：1分");
                    break;
                case Fruit.葡萄:
                    Console.WriteLine("切葡萄得分为：2分");
                    break;
                case Fruit.哈密瓜:
                    Console.WriteLine("切哈密瓜得分为：6分");
                    break;
                case Fruit.奇异果:
                    Console.WriteLine("切奇异果得分为：5分");
                    break;
                default:
                    break;
            }
        }
     //枚举角色题：
    public static void Test3() {
            Console.WriteLine("枚举第三题：");
            Console.WriteLine("1.战士的技能，2.法师的技能，3.精灵的技能");
            Console.WriteLine("请选择需要查询角色技能前的序号：");
            int num1 = Convert.ToInt32(Console.ReadLine());
            switch (num1)
            {
                case 1:
                    test3(RPG.战士的技能);                 
                    break;
                case 2:
                    test3(RPG.法师的技能);
                    break;
                case 3:
                    test3(RPG.精灵的技能);
                    break;
                default:
                    Console.WriteLine("您输入的序号不符合规范，请重新输入！！！");
                    Test3();
                    break;
            }
            Console.WriteLine("");
        }
        public static void test3(RPG rPG)
        {
            switch (rPG)
            {
                case RPG.战士的技能:
                    Console.WriteLine("战士的技能：碎石打击、烈焰锚钩、战斗咆哮");
                    break;
                case RPG.法师的技能:
                    Console.WriteLine("法师的技能：巨浪冲击、元素突击、复仇杀戮");
                    break;
                case RPG.精灵的技能:
                    Console.WriteLine("精灵的技能：减速陷阱、能量浪潮、旋风剑舞");
                    break;
                default:
                    break;
            }
        }

        public static void Main(string[] args)
        {
            refgo();
            outgo();
            Console.WriteLine("枚举第一题：");
            order state = order.已发货;
            Console.WriteLine(state);
            Console.WriteLine();

            Test2();
            Test3();

            string Judges = Convert.ToString(StringUtil.Judge());
            Console.WriteLine(Judges);

            string Judges1 = Convert.ToString(ArrayUtil.array());
            Console.WriteLine(Judges1);
            Console.WriteLine();

            Console.ReadLine();
            Console.WriteLine("唐僧脱单记：");
            StuTea stu1 = new StuTea("孙悟空");
            stu1.teacherinfo();
            StuTea stu2 = new StuTea("猪八戒");
            stu2.teacherinfo();
            StuTea stu3 = new StuTea("沙和尚");
            stu3.teacherinfo();
            StuTea stu4 = new StuTea("白龙马");
            stu4.teacherinfo();
            teacherinfo1();
            StuTea stu5 = new StuTea("孙悟空");
            stu5.teacherinfo();
            StuTea stu6 = new StuTea("猪八戒");
            stu6.teacherinfo();
            StuTea stu7 = new StuTea("沙和尚");
            stu7.teacherinfo();
            StuTea stu8 = new StuTea("白龙马");
            stu8.teacherinfo();
          }
        //创建一个静态老师字段：
        public static string tname="唐僧";
        
       //为静态字段改变老师;
        public static void teacherinfo1()
        {
            tname = "嫦娥姐姐";
        }
    }
}
  //Fruit a = (Fruit)Enum.Parse(typeof(Fruit), fruitname);
            //Console.WriteLine(a);
            //Console.WriteLine(a);
            //Console.WriteLine((int) a);    